package com.party.weixin.service;


import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.party.exception.ServiceException;
import com.party.tool.HttpTookit;
import com.party.user.controller.UserController;


public class WeiXinService {
	private final Logger logger = LoggerFactory.getLogger(UserController.class);

	public static JSONObject weixinLogin(String codes)  {  
	// public static void main(String[] args) throws Exception { 	  
		  
	     // Map<String, String[]> params = request.getParameterMap();//针对get获取get参数  
	     // String[] codes = params.get("code");//拿到的code的值  
	      String code = codes;//codes[0];//code  
	  
	  
	//这一步就是拼写微信api请求地址并 通过微信的appid 和 微信公众号的AppSecret 以及我们获取到的针对用户授权回调的code 拿到 这个用户的 openid和access_token  
	String requestUrl = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APPSECRET&code=CODE&grant_type=authorization_code".replace("APPID", "wx24d689914df77884").replace("APPSECRET", "09d2651e4cf530bd32ee281e68ec419e").replace("CODE", code);  
	String requestResult = HttpTookit.doGet(requestUrl);//我们需要自己写或者在网上找一个 doGet 方法 发送doGet请求   
	      JSONObject getCodeResultJson = JSON.parseObject(requestResult);//把请求成功后的结果转换成JSON对象  
	if(getCodeResultJson == null || getCodeResultJson.getInteger("errcode") != null || getCodeResultJson.getString("openid") == null) {  
//	          throw 这里需要抛异常 如果返回值没有 或者 出现错误返回errcode 或者 没有拿到openid  
	      }  
	String openid = getCodeResultJson.getString("openid");//拿到openid  
	  
	  
	//我们需要获取当前公众号通用的access_token 和用户的access_token是不一样的  
	//这里我为了让大家可以方便就没有写太复杂  因为微信他那边获取微信公众号的通用access_token每天只能取2000次 每次token有效期是7200S 所以在自己动手写最好放在缓存中 我的项目放在redis中  
	String requestUrl1 = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET".replace("APPID","wx24d689914df77884").replace("APPSECRET", "09d2651e4cf530bd32ee281e68ec419e");   
	String requestResult1 = HttpTookit.doGet(requestUrl1);   
	JSONObject weixinToken = JSON.parseObject(requestResult1);  
	if(weixinToken == null){  
//	    throw 这里需要抛异常 获取我们公众号token失败  
		throw new ServiceException("获取公众号token失败");
	}  
	String wxgzhToken =  weixinToken.getString("access_token");  
	  
	//这里是获取用户在我们公众里面的信息 如果没有关注公众号那么就没有办法获取详细信息 参数需要 微信公众号通用token 和 用户openid  
	String requestUrl11 = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN".replace("ACCESS_TOKEN", wxgzhToken).replace("OPENID", openid);  
	String requestResult11 = HttpTookit.doGet(requestUrl11);   
	JSONObject user = JSON.parseObject(requestResult11);  
	if(user == null || user.getInteger("errcode") != null ) {  
	   // 抛异常  
		throw new ServiceException("获取微信用户信息失败");
	}  
	 System.out.println(user);
	 System.out.println(user.getString("nickname"));
	Integer subscribe = user.getInteger("subscribe");//是否有关注我们公众号  
	      if(subscribe == 0){//没有关注我们公众号  
	           // response.sendRedirect("https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MzIyNTc1MDQ2Mw==&scene=110#wechat_redirect");//跳到我们公众号关注页面 url地址需要你么你自己去截取  
	    	  System.out.println("用户没有关注微信号");
	      }else{
	    	  System.out.println("用户已关注微信号");
	      }  
	      return user;
	  }  
	
}
